using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using DevExpress.XtraGrid;
using DevExpress.XtraGrid.Columns;
using DevExpress.XtraRichEdit.API.Word;
using Барс;
using Барс.БазовыеСервисныеФункции;
using Барс.Ядро;
using Барс.Интерфейс;
namespace Аккорд
{
	public partial class ФормаРеестраЗвонков
	{
		#region Обработчик события редактор_Клиент_ПриИзмененииВыбранногоЭлемента (f688cc92-0d10-4895-a744-995a8addd703)
		private void редактор_Клиент_ПриИзмененииВыбранногоЭлемента( object Отправитель, АргументыСобытия Аргументы )
		{
            if (ЗапретитьСобытиеКонтакта)
                return;

            if (редактор_Клиент.ВыбранныйОбъект == null)
            {
                редактор_Контакт.ВыбранныйОбъект = null;
                редактор_Контакт.ИсточникЗаписей = null;
            }
            else
            {
                редактор_Контакт.ИсточникЗаписей = КонтактыКлиента;
                редактор_Контакт.ОбновитьСвязь();
                
                if (КонтактыКлиента != null && КонтактыКлиента.Count > 0)
                {
                    редактор_Контакт.ВыбранныйОбъект = КонтактыКлиента[0];
                }
                else
                {
                    редактор_Контакт.ВыбранныйОбъект = null;
                }
            }

		    редактор_Контакт.Заблокирован = (КонтактыКлиента == null || КонтактыКлиента.Count == 0);
		}
		#endregion
		
		#region Обработчик события пунктМеню_Удалить_Нажатие (d72cf741-c037-4d5a-98ce-f499b7839c8c)
		private void пунктМеню_Удалить_Нажатие( object Отправитель, АргументыСобытия Аргументы )
		{
			if (ТекущееПримечание != null)
			{
			    Звонок.Примечания.УдалитьЭлемент(ТекущееПримечание);
			    Звонок.Примечания.Remove(ТекущееПримечание);

                таблица_Примечания.ТекущееПредставление.RefreshData();
			}
		}
		#endregion
		#region Обработчик события пенктМеню_Редактировать_Нажатие (c84115af-3783-499b-983b-7b39a98f3c1d)
		private void пунктМеню_Редактировать_Нажатие( object Отправитель, АргументыСобытия Аргументы )
		{
			if (ТекущееПримечание != null)
			{
                ФормаПримечания форма = new ФормаПримечания();
                форма.РедактируемыйОбъект = ТекущееПримечание.Примечание;
                if (форма.ПоказатьДиалог() == Барс.Интерфейс.РезультатДиалога.OK)
                {
                    таблица_Примечания.ТекущееПредставление.RefreshData();
                }   
			}
		}
		#endregion
		#region Обработчик события пунктМеню_Добавить_Нажатие (a6f48f11-441d-41ae-9900-fb0385625cea)
		private void пунктМеню_Добавить_Нажатие( object Отправитель, АргументыСобытия Аргументы )
		{
			if (Звонок != null)
			{
                ПримечаниеЗвонка примечание = new ПримечаниеЗвонка();
                примечание.Звонок = Звонок;
                примечание.Примечание = new Примечание();
                примечание.Примечание.Дата = DateTime.Now;

                ФормаПримечания форма = new ФормаПримечания();
                форма.РедактируемыйОбъект = примечание.Примечание;
                if (форма.ПоказатьДиалог() == Барс.Интерфейс.РезультатДиалога.OK)
                {
                    Звонок.Примечания.Добавить(примечание);

                    таблица_Примечания.ТекущееПредставление.RefreshData();
                }   
			}
		}
		#endregion
		
		#region Обработчик события ФормаРеестраЗвонков_ФормаЗакрывается (8ab6913f-184e-4a0e-b69f-53f9fba06b18)
		private void ФормаРеестраЗвонков_ФормаЗакрывается( object Отправитель, АргументыСобытияФормаЗакрывается Аргументы )
		{	
			кнопка_Сохранить_Нажатие(null, null);
		    РедактируемыйОбъект = null;
		    Аргументы.ПричинаЗакрытия = ПричинаЗакрытияФормы.ВызовApplicationExit;
		}
		#endregion
		
		
		#region Обработчик события кнопка_Сохранить_Нажатие (f728827a-b1be-4318-9ef5-48f97fb2fbd4)
		
		private void кнопка_Сохранить_Нажатие( object Отправитель, АргументыСобытия Аргументы )
		{
			if (реестр != null)
			{
			    ФормаИндикаторПроцесса форма = null;
                if (реестр.Элементы.КоличествоЗаписей > 50)
                {
                    форма = new ФормаИндикаторПроцесса(this, "Сохранение реестра...");
                    форма.Минимум = 0;
                    форма.Максимум = реестр.Элементы.КоличествоЗаписей;
                    форма.Показать();
                }

			    foreach (Звонок звонок in реестр.Элементы)
				{
                    if (форма != null)
                    {
                        форма.СледующийШаг("Сохранение звонка...");
                    }

                    foreach (ПримечаниеЗвонка примечание in звонок.Примечания)
                    {
                        if (примечание.Изменен || (примечание.Состояние == СостояниеХранимогоОбъекта.Новый))
                        {
                            примечание.Примечание.Заблокировать();
                            примечание.Примечание.Сохранить();
                            примечание.Примечание.СнятьБлокировку();

                            примечание.Заблокировать();
                            примечание.Сохранить();
                            примечание.СнятьБлокировку();
                        }
                    }

                    звонок.Заблокировать();
                    звонок.Сохранить();
                    звонок.СнятьБлокировку();
				}
				
				таблица.ТекущееПредставление.RefreshData();

                if (форма != null)
                {
                    форма.Закрыть();
                }
			}
		}
		
		#endregion
		
		#region Обработчик события таблица_ИзменениеТекущейСтроки (db5f0055-ab02-410b-a2a9-256c40fb87df)
		private void таблица_ИзменениеТекущейСтроки( int ИндексТекущейСтроки, int ИндексПредыдущейСтроки )
		{
		    ЗапретитьСобытиеКонтакта = true;

            if (таблица.ТекущаяПозицияИсточникаДанных >= 0)
            {
                РедактируемыйОбъект = реестр.Элементы[таблица.ТекущаяПозицияИсточникаДанных];
            }
            else
            {
                РедактируемыйОбъект = null;
            }

            ЗаблокироватьРедакторы(РедактируемыйОбъект == null);
            редактор_Контакт.Заблокирован = (РедактируемыйОбъект == null || КонтактыКлиента == null || КонтактыКлиента.Count == 0);

            if (РедактируемыйОбъект == null)
            {
                ОчиститьЗначенияРедакторов();
            }

			УстановитьСвязиКомпонентов();
            ОбновитьСвязиКомпонентов();

		    ЗапретитьСобытиеКонтакта = false;
		}
		#endregion
		#region Обработчик события кнопка_Добавить_Нажатие (7ff9aeb9-8c56-4ab8-8366-65fd81669f12)
		private void кнопка_Добавить_Нажатие( object Отправитель, АргументыСобытия Аргументы )
		{
			РедактируемыйОбъект = new Звонок();
            if (ПеременныеПриложения.ТекущийМенеджер != null)
            {
                Звонок.Менеджер = ПеременныеПриложения.ТекущийМенеджер;
                редактор_Менеджер.Заблокирован = true;
            }

		    Звонок.Дата = DateTime.Now;
			Звонок.Сохранить();
            реестр.Элементы.Add(Звонок);

		    таблица.ТекущееПредставление.RefreshData();
		    int индекс = таблица.ТекущееПредставление.GetRowHandle(реестр.Элементы.Count - 1);
		    таблица.ТекущееПредставление.FocusedRowHandle = индекс;

			УстановитьСвязиКомпонентов();
			ОбновитьСвязиКомпонентов();
		}
		#endregion
		
		
		#region Обработчик события ФормаРеестраЗвонков_Открытие (d2058be2-7468-446d-8a0b-9138985eccb0)
		
		private void ФормаРеестраЗвонков_Открытие( object Отправитель, АргументыСобытия Аргументы )
		{
		    ЗаблокироватьРедакторы(true);
			
            СпрашиватьОСохранении = false;
            столбец_Направление.Width = 35;
            столбец_Направление.OptionsColumn.AllowSize = false;

		    столбец_Дата.Width = 25;
		    //столбец_Дата.OptionsColumn.AllowSize = false;

            столбец_Время.Width = 15;
            //столбец_Время.OptionsColumn.AllowSize = false;

		    столбец_Реакция.Width = 50;
            //столбец_Реакция.OptionsColumn.AllowSize = false;

		    столбец_ДатаПримечания.Width = 50;
		    //столбец_ДатаПримечания.OptionsColumn.AllowSize = false;

		    таблица_Примечания.РазрешитьГруппировку = false;
		    таблица_Примечания.ПоказыватьСтрокуИтогов = false;
		    таблица_Примечания.ПунктыСтандартногоМеню = СтандартныеПунктыМенюТаблицы.Нет;

		    пунктМеню_Добавить.Иконка = Ресурсы.Иконка_Добавить;
            пунктМеню_Редактировать.Иконка = Ресурсы.Иконка_Редактировать;
            пунктМеню_Удалить.Иконка = Ресурсы.Иконка_Удалить;

            редактор_Менеджер.ПриПолученииИсточникаЗаписейДляВыбора += new ВыборИзСправочника.СобытиеПолученияИсточникаЗаписейДляВыбора(редактор_Менеджер_ПриПолученииИсточникаЗаписейДляВыбора);
		    редактор_Контакт.ОтображаемоеПолеОбъекта = "КонтактТелефон";

            таблица.ТекущееПредставление.CustomColumnDisplayText += new DevExpress.XtraGrid.Views.Base.CustomColumnDisplayTextEventHandler(ТекущееПредставление_CustomColumnDisplayText);

            foreach (BaseEdit редактор in СписокРедакторов.Values)
            {
                редактор.TextChanged += new EventHandler(редактор_TextChanged);
                редактор.LostFocus += new EventHandler(редактор_TextChanged);
            }

			УстановитьТекущегоМенеджера();
			
            таблица.ПунктыСтандартногоМеню = СтандартныеПунктыМенюТаблицы.Удалить | СтандартныеПунктыМенюТаблицы.Обновить;
		    таблица.ТекущееПредставление.ClearColumnsFilter();

            реестр = new РеестрЗвонков();
			if (ПеременныеПриложения.ТекущийМенеджер != null)
			{
			    реестр.Элементы.Запрос.ДобавитьУсловиеОтбора("Менеджер", ПеременныеПриложения.ТекущийМенеджер);
			}
			
            реестр.Элементы.ЗагрузитьПолностью();
            таблица.ИсточникЗаписей = реестр.Элементы;
            таблица.Обновить();

            таблица.ТекущееПредставление.ActiveFilter.BeginUpdate();
            таблица.ТекущееПредставление.ActiveFilter.Add(столбец_Дата, new ColumnFilterInfo(столбец_Дата, DateTime.Now));
            таблица.ТекущееПредставление.ActiveFilter.EndUpdate();

            таблица.ТекущееПредставление.FocusedRowHandle = 0;
		}

        void редактор_TextChanged(object sender, EventArgs e)
        {
            таблица.ТекущееПредставление.RefreshData();
        }

        object редактор_Менеджер_ПриПолученииИсточникаЗаписейДляВыбора(АргументыОтменяемогоСобытия Аргументы)
        {
            return new СправочникМенеджеров();
        }

        void ТекущееПредставление_CustomColumnDisplayText(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDisplayTextEventArgs e)
        {
            if (e.Value != null)
            {
                if (e.Column.FieldName.Contains("Реакция") || e.Column.FieldName.Contains("Направление"))
                {
                    e.DisplayText = СервисныеФункции.РазделитьСтроку(e.Value.ToString());
                }
            }            
        }
		
		#endregion
		
	}
}